/*                          UX-Framework                               
 *                                                                 
 *  iZE Co.,Ltd. Copyright 2009 All rights reserved.          
 *  This file is distributed under the terms of the GNU Lesser 
 *  General Public License, described in file LICENSE.                                     
 */
package jp.ize.ux;

// {{{ imports
#if flash9
import flash.display.Graphics;
#elseif flash
import flash.MovieClip;
#end
// }}}
// {{{ class UXGraphics
/** 
 * UXGraphicsクラス<br>
 * グラフィックスコンテキストクラスです。<br>
 *
 * @author		iZE Co., Ltd.<br>
 * @version		$Id$<br>
 */
class UXGraphics
{
	// {{{ properties

	#if flash9
	private var _graphics : Graphics;
	#elseif flash
	private var _mc : MovieClip;
	#end

	// }}}
	// {{{ public var lineStyle(default, default) : UXLineStyle
	/**
	 * 線のスタイル情報を保持します。
	 */
	public var lineStyle( default, setLineStyle ) : UXLineStyle;
	// }}}
	// {{{ public var gradient(default, default) : UXGradient
	/**
	 * グラデーション情報を保持します。この情報は線の描画と塗りに影響を与えます。
	 */
	public var gradient(default, default) : UXGradient;
	// }}}
	#if flash9
	// {{{ public function new( g : Graphics )
	/**
	 * コンストラクタ。スプライトのGraphicsインスタンスを受ける。
	 */
	public function new( g : Graphics )
	{
		_graphics = g;
	}
	// }}}
	#elseif flash
	// {{{ public function new( mc : MovieClip )
	/**
	 * コンストラクタ。MoviceClipのインスタンスを受ける。
	 */
	public function new( mc : MovieClip )
	{
		_mc = mc;
	}
	// }}}
	#end
 	// {{{ public function moveTo( point : UXPoint ) : Void
	/**
	 * 現在の描画位置をpointに移動します。
	 */
	public function moveTo( point : UXPoint ) : Void
	{
	}
	// }}}
	// {{{ public function lineTo( point : UXPoint ) : Void
	/**
	 * 現在の描画位置からpointまで線を描画します。
	 */
	public function lineTo( point : UXPoint ) : Void
	{
	}
	// }}}
	// {{{ public function drawRect( rect : UXRect ) : Void
	/**
	 * 矩形を描画します。
	 */
	public function drawRect( rect : UXRect ) : Void
	{
		#if flash9
		_graphics.drawRect(rect.x, rect.y, rect.width, rect.height);
		#elseif flash
		//TODO
		#end
	}
	// }}}
	// {{{ public function drawRoundRect( rect : UXRect, ellipseWidth : Float, ellipseHeight : Float ) : Void
	/**
	 * 角丸矩形を描画します。ellipseWidth, ellipseHeightはそれぞれ、角丸楕円の幅と高さを意味します。
	 */
	public function drawRoundRect( rect : UXRect, ellipseWidth : Float, ellipseHeight : Float ) : Void
	{
	}
	// }}}
	// {{{ public function drawCircle( point : UXPoint, radius : Float ) : Void
	/**
	 * 円を描画します。pointは円の中心座標、radiusは半径です。
	 */
	public function drawCircle( point : UXPoint, radius : Float ) : Void
	{
	}
	// }}}
	// {{{ public function drawEllipse( rect : UXRect ) : Void
	/**
	 * 指定された矩形に内接する楕円を描画します。
	 */
	public function drawEllipse( rect : UXRect ) : Void
	{
	}
	// }}}
	// {{{ public function beginFill( color : UXColor ) : Void
	/**
	 * この関数を呼び出した後の描画操作を単色塗りに設定します。
	 */
	public function beginFill( color : UXColor ) : Void
	{
		#if flash9
		_graphics.beginFill(color.value, color.alpha);
		#elseif flash
		_mc.beginFill(color.value, color.alpha);
		#end
	}
	// }}}
	// {{{ public function endFill() : Void
	/**
	 * 最後に呼ばれた塗り操作の開始命令からこの関数が呼ばれるまでに行われた描画の塗りを実行します。
	 */
	public function endFill() : Void
	{
		#if flash9
		_graphics.endFill();
		#elseif flash
		_mc.endFill();
		#end
	}
	// }}}
	// {{{ private function setLineStyle(line_style) : Void
	/**
	 *
	 */
	private function setLineStyle( line_style : UXLineStyle ) : UXLineStyle
	{
		#if flash9
		_graphics.lineStyle(line_style.thickness, line_style.color.value, line_style.color.alpha,
							line_style.pixelHinting); //TODO, line_style.scaleMode, line_style.caps,line_style.joints, line_style.miterLimit);		
		return line_style;
		#elseif flash
		//TODO
		return line_style;
		#end
	}
	// }}}
}
// }}}
